package com.melon.common.intergration.swagger;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;

/**
 * SwaggerConfig
 */

/**
 * 访问http://localhost:8080/swagger-ui.html 就能看到<br/>
 * SpringBoot之springfox(Swagger) (ApiDoc接口文档)
 * 会影响测试、暂时屏蔽
 * 解决方案：http://blog.csdn.net/zheng0518/article/details/52213865
 *
 * @author XiongJinTeng
 */
@Configuration
@EnableWebMvc
@EnableSwagger2
@ComponentScan("com.melon.modules.**.web")
public class SwaggerConfig {

    /**
     * * SpringBoot默认已经将classpath:/META-INF/resources/和classpath:/META-INF/
     * resources/webjars/映射 * 所以该方法不需要重写，如果在SpringMVC中，可能需要重写定义（我没有尝试） * 重写该方法需要
     * extends WebMvcConfigurerAdapter *
     */
    // @Override
    // public void addResourceHandlers(ResourceHandlerRegistry registry) {
    // registry.addResourceHandler("swagger-ui.html")
    // .addResourceLocations("classpath:/META-INF/resources/");
    //
    // registry.addResourceHandler("/webjars/**")
    // .addResourceLocations("classpath:/META-INF/resources/webjars/");
    // }

    /**
     * 可以定义多个组，比如本类中定义把test和demo区分开了 * （访问页面就可以看到效果了） *
     */
    @Bean
    public Docket testApi() {
        return new Docket(DocumentationType.SWAGGER_2).groupName("test")
                .genericModelSubstitutes(DeferredResult.class)
                // .genericModelSubstitutes(ResponseEntity.class)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(true)
                .pathMapping("/")// base，最终调用接口后会和paths拼接在一起
                .select()
                .paths(or(regex("/api/.*")))// 过滤的接口
                .build()
                .apiInfo(testApiInfo());
    }

    @Bean
    public Docket demoApi() {
        return new Docket(DocumentationType.SWAGGER_2).groupName("demo")
                .genericModelSubstitutes(DeferredResult.class)
                // .genericModelSubstitutes(ResponseEntity.class)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(false)
                .pathMapping("/")
                .select()
                .paths(or(regex("/demo/.*")))// 过滤的接口
                .build()
                .apiInfo(demoApiInfo());
    }

    private ApiInfo testApiInfo() {
        Contact contact = new Contact("xiong jin teng", "http://www.apache.org/licenses/LICENSE-2.0.html", "577162324@qq " +
                " .com");
        return new ApiInfo("Electronic Health Record(EHR) Platform API",
                "EHR Platform's REST API, all the applications could access the Object model data via JSON.",
                "0.1", "NO terms of service", contact, "主页", "http://www.apache.org/licenses/LICENSE-2.0.html");
    }

 /*   private ApiInfo testApiInfo2() {
        Contact contact = new Contact("王念", "http://my.oschina.net/wangnian", "2251181679@qq.com");
        return new ApiInfo("某API接口", // 大标题
                "REST风格API", // 小标题
                "0.1", // 版本
                "www.baidu.com",
                contact, // 作者
                "主页", // 链接显示文字
                "http://www.apache.org/licenses/LICENSE-2.0.html"// 网站链接
        );
    }*/

    private ApiInfo demoApiInfo() {

        Contact contact = new Contact("王念", "http://my.oschina.net/wangnian", "2251181679@qq.com");
        return new ApiInfo("某API接口", // 大标题
                "REST风格API", // 小标题
                "0.1", // 版本
                "www.baidu.com",
                contact, // 作者
                "主页", // 链接显示文字
                "http://www.apache.org/licenses/LICENSE-2.0.html"// 网站链接
        );
    }

   /* private ApiInfo demoApiInfo2() {
        Contact contact = new Contact("王念", "http://my.oschina.net/wangnian", "2251181679@qq.com");
        return  new ApiInfo("某API接口", // 大标题
                "REST风格API", // 小标题
                "0.1", // 版本
                "www.baidu.com",
                contact, // 作者
                "主页", // 链接显示文字
                ""// 网站链接
        );
    }*/
}
